﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SIPDTO;

namespace SIPDAL
{
    public class mgCanton
    {
       /// <summary>
        /// Declaracion de Variables
        /// </summary>
        /// 
        SIPDataContext dc = new SIPDataContext();
        dtoError _resp = new dtoError();
        tblCanton _tbcanton = new tblCanton();
        List<dtoCanton> _canton = new List<dtoCanton>();

        public mgCanton()
        {
        }

        /// <summary>
        /// Obtiene los cantones para ser mostrados en los combos que se utilizan en parroquia
        /// </summary>
        /// <param name="canton"></param>
        /// <returns></returns>
       public List<dtoCanton> ObtenerCantonxProvincia(dtoCanton canton) 
        {
            int i = 0;

            try
            {

                var condicion = (from p in dc.tblCantons
                                 where p.id_provincia == canton.Provincia
                                 select p).ToList();
                {
                    foreach (tblCanton reg in condicion)
                    {
                        _canton.Add(new dtoCanton());
                        _canton[i].Identificacion = reg.id_canton;
                        _canton[i].Descripcion = reg.descripcion;
                        i++;
                    }
                }

            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrió un error al obtener los datos " + ex.Message);
            }

            return _canton;

        }

        /// <summary>
        /// Obtiene el canton que se va a mostrar en pantalla cuando se seleccione del grid
        /// </summary>
        /// <param name="canton"></param>
        /// <returns></returns>
        public List<dtoCanton> ObtenerCanton(dtoCanton canton) 
        {
            int i = 0;

            try
            {

                var condicion = (from p in dc.tblCantons
                                 where p.id_canton == canton.Identificacion
                                 select p).ToList();
                {
                    foreach (tblCanton reg in condicion)
                    {
                        _canton.Add(new dtoCanton());
                        _canton[i].Identificacion = reg.id_canton;
                        _canton[i].Descripcion = reg.descripcion;
                        _canton[i].Provincia = reg.id_provincia;
                        _canton[i].Estado = Convert.ToBoolean (reg.activo); 
                        i++;
                    }
                }

            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrió un error al obtener los datos " + ex.Message);
            }

            return _canton;

        }

        /// <summary>
        /// Obtiene la información de los cantones que se van a mostrar en el grid de la pantalla ListadoCanton
        /// </summary>
        /// <returns></returns>
     
        public List<dtoCanton> ObtenerTodosCantones() // lista de cantones a mostrar para el grid
        {
            int i = 0;
            try
            {
                var condicion = (from p in dc.tblCantons
                                 select p).ToList();

                //Esto aplica cuando no existan clientes activos
                if (condicion.Count.Equals(0))
                {
                    _canton.Add(new dtoCanton());
                    _canton[i].Identificacion = 0;
                    _canton[i].Descripcion = "No hay parroquias registradas";
                }
                else
                {
                    foreach (tblCanton reg in condicion)
                    {
                        _canton.Add(new dtoCanton());
                        _canton[i].Identificacion = reg.id_canton;
                        _canton[i].Descripcion = reg.descripcion;
                        _canton[i].Provincia = reg.id_provincia;
                        _canton[i].Estado = Convert.ToBoolean(reg.activo);
                        i++;
                    }
                }

            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo recuperar la informacion. " + ex.Message);
            }

            return _canton;

        }



        public dtoError AceptarCanton(dtoCanton canton, int evento)
        {

            _tbcanton.id_provincia = canton.Provincia;
            _tbcanton.id_canton = canton.Identificacion;
            _tbcanton.descripcion = canton.Descripcion;
            _tbcanton.activo  = canton.Estado;

            try
            {
                _resp = ExisteCanton(canton);
                if ((_resp.IdError == -101) && (evento == 1)) //No existe el registro y se procede a ingresarlo
                {
                    dc.tblCantons.InsertOnSubmit(_tbcanton);
                    dc.SubmitChanges();
                    _resp.Mensaje = "Información guardada correctamente.";
                    _resp.IdError = 100;
                    

                }
                if ((_resp.IdError == 101) && (evento == 1))
                {
                    _resp.Mensaje = "La información del cantón ya se encuentra registrada.";
                    _resp.IdError = -100;
                }
                else if ((_resp.IdError == 101) && (evento == 2))// Se modifica los registros del canton
                {
                    tblCanton param = dc.tblCantons.Single(p => p.id_canton == canton.Identificacion);
                    param.descripcion = canton.Descripcion;
                    param.activo = canton.Estado;
                    dc.SubmitChanges();
                    _resp.Mensaje = "Información modificada correctamente.";
                    _resp.IdError = 100;

                }
                return _resp;
            }

            catch (Exception ex)
            {
                _resp.IdError = -100;
                _resp.Mensaje = ex.Message.ToString();
                return _resp;
                throw;
            }

        }

        public dtoError ExisteCanton(dtoCanton canton)
        {

            var condicion = (from p in dc.tblCantons
                             where p.id_canton == canton.Identificacion
                             select p).Count();
            if (Convert.ToInt32(condicion.ToString()) > 0)
            {
                _resp.Mensaje = "El canton ya existe en la tabla de Cantones";
                _resp.IdError = 101;

            }
            else
            {
                _resp.IdError = -101;
                _resp.Mensaje = "El canton no existe en la tabla de Cantones";
            }
            return _resp;
        }

        public dtoError InactivarCanton(dtoCanton canton)
        {
            try
            {
                var condicion = (from p in dc.tblCantons
                                 where p.id_canton == canton.Identificacion
                                 select p).ToList();
                foreach (tblCanton _canton in condicion)
                {
                   // _canton.descripcion = canton.Descripcion;
                    _canton.activo = canton.Estado;
                    dc.SubmitChanges();
                    _resp.Mensaje = "Cantón inactivado correctamente.";
                    _resp.IdError = 100;
                }
               
            }
            catch (Exception ex)
            {
                _resp.IdError = -100;
                _resp.Mensaje = ex.Message.ToString();
                return _resp;
                throw;
            }

            return _resp;
        }
    }
}

